macOS: fix #2436 raise transient window on focus
authorThomas Holder <thomas@thomas-holder.de>
Tue, 19 Jan 2021 08:31:00 +0000 (09:31 +0100)
committerThomas Holder <thomas@thomas-holder.de>
Tue, 19 Jan 2021 08:31:00 +0000 (09:31 +0100)
Ported from gtk-3-24 e278f3890540ad59eaccf32fd90fe49416e1f7f2

Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/2436

gdk/macos/gdkmacosdisplay.c

index be2d111c59fb71b3368336948faaeec91961e4aa..ea0721579497ab4e713d91e4f8f2c4bd99e48536 100644 (file)
@@ -547,6 +547,20 @@ _gdk_macos_display_surface_resigned_key (GdkMacosDisplay *self,
   _gdk_macos_display_clear_sorting (self);
 }
 
+/* Raises a transient window.
+ */
+static void
+raise_transient (GdkMacosSurface *surface)
+{
+  GdkMacosSurface *parent_surface = GDK_MACOS_SURFACE (GDK_SURFACE (surface)->transient_for);
+
+  NSWindow *parent = _gdk_macos_surface_get_native (parent_surface);
+  NSWindow *window = _gdk_macos_surface_get_native (surface);
+
+  [parent removeChildWindow:window];
+  [parent addChildWindow:window ordered:NSWindowAbove];
+}
+
 void
 _gdk_macos_display_surface_became_main (GdkMacosDisplay *self,
                                         GdkMacosSurface *surface)
@@ -559,6 +573,9 @@ _gdk_macos_display_surface_became_main (GdkMacosDisplay *self,
 
   g_queue_push_head_link (&self->main_surfaces, &surface->main);
 
+  if (GDK_SURFACE (surface)->transient_for)
+    raise_transient (surface);
+
   _gdk_macos_display_clear_sorting (self);
 }